package com.feeyo.groundservice.composewidget.util

import com.feeyo.groundservice.base_util.toastCenter
import com.feeyo.groundservice.composewidget.constant.NumberType

/**
 *作者：70893 on 2025-09-26
 *描述：
 */


/**
 * 对应数字类型和小数位数的正则表达式
 * @param numberType 整数类型
 * @param this  小数位数
 * @return 正则表达式
 * **/

fun Int.getNumberRegex(numberType: NumberType): String = when (this) {
    0 -> when (numberType) {
        NumberType.Positive -> "^0|[1-9](\\d+)?$"//正整数,可以输入0
        NumberType.Negative -> "^0|-([1-9](\\d+)?)?$"//负整数，必须-开头
        NumberType.NONE -> "^0|[1-9](\\d+)?|-([1-9](\\d+)?)?$"//整数
    }

    else -> when (numberType) {
        NumberType.Positive -> "^0|0\\.(\\d{1,$this})?|[1-9](\\d+)?(\\.)?(\\d{1,$this})?$"//正数 最多1位小数,可以输入0 或者0.xx
        NumberType.Negative -> "^0|-(0|0\\.(\\d{1,$this})?)?|-([1-9](\\d+)?(\\.)?(\\d{1,$this})?)?$"//负数 最多1位小数
        NumberType.NONE -> "^0|0\\.(\\d{1,$this})?|[1-9](\\d+)?(\\.)?(\\d{1,$this})?|-(0|0\\.(\\d{1,$this})?)?|-([1-9](\\d+)?(\\.)?(\\d{1,$this})?)?$"//小数 最多1位小数
    }

}


internal fun Int.getNumberRegexTip(numberType: NumberType): String = when (this) {
    0 -> when (numberType) {
        NumberType.Positive -> "请输入正整数"//正整数
        NumberType.Negative -> "请输入负整数"//负整数
        NumberType.NONE -> "请输入整数"//整数
    }

    else -> when (numberType) {
        NumberType.Positive -> "请输入正数，最多${this}位小数"//正数，最多xx位小数
        NumberType.Negative -> "请输入负数，最多${this}位小数"//负数，最多xx位小数
        NumberType.NONE -> "格式错误，最多${this}位小数"//最多xx位小数
    }
}


/**校验数字的
 * @param decimalPlaces 小数位数
 * @param this 输入的数字
 * @return true
 * **/
fun String.getNumberRegex(decimalPlaces: Int, needTip: Boolean = false): Boolean {
    if (decimalPlaces < 0) {
        toastCenter("请输入正确的小数位数")
        return false
    }
    val regex = when (decimalPlaces) {
        0 -> "^0|-?[1-9](\\d+)?$"
        //0 0.1 -0.1 1 -1 1.1 -1.1 其中包含整数
        else -> "0|-?0\\.\\d{1,$decimalPlaces}|-?[1-9](\\d+)?|-?[1-9](\\d+)?\\.(\\d{1,$decimalPlaces})$"
    }

    val match = this.matches(regex.toRegex())
    return if (match) {
        true
    } else {
        if (needTip) {
            toastCenter("格式不正确")
        }

        false
    }
}